//package com.dinstar.dinlink.sip;
//
//import android.content.Context;
//import android.media.AudioManager;
//import android.media.MediaPlayer;
//import android.media.MediaRecorder;
//import android.media.Ringtone;
//import android.util.Log;
//
//import com.dinstar.dinlink.R;
//
//import org.pjsip.pjsua2.ToneGenerator;
//
//import java.io.IOException;
//import java.util.Objects;
//
// PJSIP使用示例
//public class PjsipAudioManager {
//
//    private MediaPlayer mPlayer = null;
//    private MediaRecorder mRecorder = null;
//    private ToneGenerator mRingbackTone;
//    private Ringtone mRingtone = null;
//    private Context mContext;
//    private static String TAG = "scAudioManager";
//    private int type = -1;
//    private static int ALARM_TYPE = 1;
//    private static int PHONE_TYPE = 2;
//    private String tempFileName;
//
//    private static PjsipAudioManager ourInstance;
//
//    public static PjsipAudioManager getInstance() {
//        if (ourInstance == null) {
//            synchronized (PjsipAudioManager.class) {
//                if (ourInstance == null) {
//                    ourInstance = new PjsipAudioManager();
//                }
//            }
//        }
//        return ourInstance;
//    }
//
//    private PjsipAudioManager() {
//    }
//
//    public void setSpeakerMode(final Boolean isActive) {
//        //todo 用线程池 2019.11.20
//        new Thread(() -> {
//            Log.d("SIP", "setSpeakerMode");
//            AudioManager am = ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE));
//            am.setMode(AudioManager.MODE_NORMAL);
//            am.setSpeakerphoneOn(isActive);
//        }).start();
//    }
//
//    public void muteMicrophone(Boolean state) {
//        Log.d("SIP", "muteMicrophone: " + state.toString());
//        AudioManager am = ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE));
//        am.setMicrophoneMute(state);
//    }
//
//    public synchronized void startRingbackTone() {
//        this.playTone(R.raw.ring_back, true);
//    }
//
//    public synchronized void startRingtone() {
//        type = PHONE_TYPE;
//        this.playTone(R.raw.ringtone, true);
//    }
//
//    public synchronized void stopRingtone() {
//        this.stopTone();
//    }
//
//    public synchronized void stopAlarmSound() {
//        if (type == ALARM_TYPE) {
//            this.stopTone();
//        }
//    }
//
//    public synchronized void startBusyTone() {
//        this.playTone(R.raw.busytone, false);
//
//    }
//
//    public void playDTMF(String num) {
//        Log.i(TAG, "The dtmf number '" + num + "' will be called.");
//        int sound = 0;
//        switch (num) {
//            case "0" -> sound = R.raw.dtmf0;
//            case "1" -> sound = R.raw.dtmf1;
//            case "2" -> sound = R.raw.dtmf2;
//            case "3" -> sound = R.raw.dtmf3;
//            case "4" -> sound = R.raw.dtmf4;
//            case "5" -> sound = R.raw.dtmf5;
//            case "6" -> sound = R.raw.dtmf6;
//            case "7" -> sound = R.raw.dtmf7;
//            case "8" -> sound = R.raw.dtmf8;
//            case "9" -> sound = R.raw.dtmf9;
//            case "#" -> sound = R.raw.dtmfhash;
//            case "*" -> sound = R.raw.dtmfstar;
//        }
//        if (sound != 0) {
//            this.playTone(sound, false);
//        }
//    }
//
//
//    /**
//     * 检查录音
//     * @param callbackContext
//     */
//    public void checkAudioRecord(final CallbackContext callbackContext) {
//
//        this.setSpeakerMode(true);
//
//        mPlayer = MediaPlayer.create(mContext, R.raw.ring_back);
//        mPlayer.setLooping(false);
//        this.startRecording();
//
//        mPlayer.setOnCompletionListener(mp -> {
//            try {
//                //stop recording
//                if (Objects.nonNull(mRecorder)) {
//                    mRecorder.stop();
//                    mRecorder.release();
//                    mRecorder = null;
//                }
//
//                //play back the recorded file
//                mPlayer = new MediaPlayer();
//                //todo: 检查缓存文件
//                mPlayer.setDataSource(tempFileName);
//                mPlayer.prepare();
//                mPlayer.setOnCompletionListener(mp1 -> callbackContext.onSuccess(""));
//                mPlayer.start();
//            } catch (IOException e) {
//                callbackContext.onFailed("e=" + e.toString());
//            }
//        });
//        mPlayer.start();
//    }
//
//    public synchronized void stopTone() {
//        if (mPlayer != null) {
//            mPlayer.stop();
//            mPlayer = null;
//        }
//    }
//
//    private synchronized void playTone(int tone, boolean loop) {
//        if (mPlayer != null) {
//            this.stopTone();
//        }
//
//        mPlayer = MediaPlayer.create(mContext, tone);
//        mPlayer.setLooping(loop);
//        mPlayer.start();
//
//    }
//
//    public void startRecording() {
//        mRecorder = new MediaRecorder();
//        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//        mRecorder.setOutputFile(tempFileName);
//        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//
//        try {
//            mRecorder.prepare();
//        } catch (IOException e) {
//            Log.e("startRecording", "prepare() failed");
//        }
//
//        mRecorder.start();
//    }
//
//}
